home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / MP / kernel_switch / jmptab.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  4.7 KB  |  154 lines

  1. /*
  2.  * Copyright 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /*
  18.  * Jump table definition macro's
  19.  *
  20.  * This file expects to be included before jmpsyms.h generated by somthing like
  21.  *
  22.  * grep JMPTAB_ENTRY *.f | sed 's/JMPTAB_DEFINE/JMPTAB_ENTRY/' > jmpsyms.h
  23.  *
  24.  * To make a jump table entry point do the following instead of placing 
  25.  * the symbol in the procedure etc.
  26.  *      JMPTAB_ENTRY(solve,_mips1,_mips2)
  27.  *
  28.  *  Compile the file with
  29.  *  f77 -DMIPS2 -mips2 file.f -o mips2_file.o
  30.  *      and
  31.  *  f77 -DMIPS1 -mips1 file.f -o mips1_file.o
  32.  *
  33.  *  cc -c jmptab_code.s
  34.  *  cc -c jmptab_switch.c
  35.  *
  36.  */
  37.  
  38. #ifdef __ANSI_CPP__
  39.  
  40.  
  41. #ifdef MIPS2
  42. #define JMPTAB_DEFINE(symbol,suf1,suf2)     symbol ## suf2
  43. #else
  44. #ifdef MIPS1
  45. #define JMPTAB_DEFINE(symbol,suf1,suf2)     symbol ## suf1
  46. #else
  47. #define JMPTAB_DEFINE(symbol,suf1,suf2)     symbol
  48. #endif
  49. #endif
  50.  
  51. #ifdef JMPTAB_CODE
  52.  
  53. #include <asm.h>
  54. #include <regdef.h>
  55.  
  56. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  57.         .globl  symbol ## _addr;                                        \
  58.         .lcomm  symbol ## _addr 4;                                      \
  59.         .text;                                                          \
  60.         .ent    symbol ## _,0;                                          \
  61.         .globl  symbol ## _;                                            \
  62. symbol ## _:;                                                           \
  63.         lw      t6, symbol ## _addr;                                    \
  64.         j       t6;                                                     \
  65.         .end    symbol ## _
  66.  
  67. #else
  68.  
  69. #ifdef JMPTAB_EXTERNS
  70.  
  71. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  72.         extern int (* symbol ## _addr )();                              \
  73.         extern int  symbol ## suf1 ## _ ();                             \
  74.         extern int  symbol ## suf2 ## _ ();                             \
  75.  
  76. #else
  77.  
  78. #ifdef JMPTAB_SETSUF1
  79.  
  80. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  81.         symbol ## _addr = symbol ## suf1 ## _;
  82.  
  83. #else
  84.  
  85. #ifdef JMPTAB_SETSUF2
  86.  
  87. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  88.         symbol ## _addr = symbol ## suf2 ## _;
  89.  
  90. #endif /* JMPTAB_SETSUF2 */
  91. #endif /* JMPTAB_SETSUF1 */
  92. #endif /* JMPTAB_EXTERNS */
  93. #endif /* JMPTAB_CODE */
  94.  
  95.  
  96. #else /* __ANSI_CPP__ */
  97.  
  98. #ifdef MIPS2
  99. #define JMPTAB_DEFINE(symbol,suf1,suf2)     symbol/**/suf2
  100. #else
  101. #ifdef MIPS1
  102. #define JMPTAB_DEFINE(symbol,suf1,suf2)     symbol/**/suf1
  103. #else
  104. #define JMPTAB_DEFINE(symbol,suf1,suf2)     symbol
  105. #endif
  106. #endif
  107.  
  108. #ifdef JMPTAB_CODE
  109.  
  110. #include <asm.h>
  111. #include <regdef.h>
  112.  
  113. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  114.         .globl  symbol/**/_addr;                                        \
  115.         .lcomm  symbol/**/_addr 4;                                      \
  116.         .text;                                                          \
  117.         .ent    symbol/**/_,0;                                          \
  118.         .globl  symbol/**/_;                                            \
  119. symbol/**/_:;                                                           \
  120.         lw      t6, symbol/**/_addr;                                    \
  121.         j       t6;                                                     \
  122.         .end    symbol/**/_
  123.  
  124. #else
  125.  
  126. #ifdef JMPTAB_EXTERNS
  127.  
  128. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  129.         extern int (* symbol/**/_addr )();                              \
  130.         extern int  symbol/**/suf1/**/_ ();                             \
  131.         extern int  symbol/**/suf2/**/_ ();                             \
  132.  
  133. #else
  134.  
  135. #ifdef JMPTAB_SETSUF1
  136.  
  137. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  138.         symbol/**/_addr = symbol/**/suf1/**/_;
  139.  
  140. #else
  141.  
  142. #ifdef JMPTAB_SETSUF2
  143.  
  144. #define JMPTAB_ENTRY(symbol,suf1,suf2)                                  \
  145.         symbol/**/_addr = symbol/**/suf2/**/_;
  146.  
  147. #endif /* JMPTAB_SETSUF2 */
  148. #endif /* JMPTAB_SETSUF1 */
  149. #endif /* JMPTAB_EXTERNS */
  150. #endif /* JMPTAB_CODE */
  151. #endif /* __ANSI_CPP__ */
  152.  
  153.  
  154.